/**
 * Copyright 2019 Google LLC. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @ignore
 *
 * @param lng
 */
function lngToX(lng: number): number {
  return 1 + lng / 180;
}
/**
 * @ignore
 *
 * @param {number} lat
 * @returns {number}
 */
function latToY(lat: number): number {
  const sinofphi = Math.sin((lat * Math.PI) / 180);
  return 1 - (0.5 / Math.PI) * Math.log((1 + sinofphi) / (1 - sinofphi));
}

/**
 * @ignore
 *
 * @param latlng
 * @param zoom
 */
export function latLngToPixel(
  latlng: google.maps.LatLng,
  zoom: number
): google.maps.Point {
  return new google.maps.Point(
    ~~(0.5 + lngToX(latlng.lng()) * (2 << (zoom + 6))),
    ~~(0.5 + latToY(latlng.lat()) * (2 << (zoom + 6)))
  );
}
